AWS Transfer for SFTPでTerminalからサーバ作成してbatchmodeでの動作確認までやってみた #reinvent
re:Invent 2018で発表されたAWS Transfer for SFTPにて、サーバ作成からbatchmodeでのファイル取得までをTerminal上で一通り完結させてみたくなり、試してみました。
目次
事前準備
pipenvにてPython3.6とawscli
を導入します。
% pipenv install --python 3.6 % pipenv install awscli % pipenv shell
なお、利用するRoleは事前に作成しておきます。以下の記事を参考にしてみてください。
Role-Arnの確認
RoleのArnが要求されるため、事前にaws-iamにて確認しておきます。
% aws iam list-roles | jq '.Roles[].Arn'
awscliからの操作
既にawscliからtransferの操作は可能になっています。
以下の順に操作します。
- サーバの作成
- ユーザの作成
- PublicKeyの登録
サーバの作成
作成後に表示されるServerIDを把握しやすくするため、jq
で絞り込んでいます。
% aws transfer create-server --identity-provider-type SERVICE_MANAGED | jq '.ServerId' "s-XXXXXXXXXXXXXXXXXXX"
ユーザの作成
今回はSFTPのユーザ名をtestにして作成しています。
% aws transfer create-user --role="arn:aws:iam::XXXXXXXXXXXXXXX:role/<ROLE_NAME>" --server-id="s-XXXXXXXXXXXXXXXXXXX" --user-name="test" { "ServerId": "s-XXXXXXXXXXXXXXXXXXX", "UserName": "test" }
PublicKeyの登録
Keyを作成していない場合はssh-keygen
で作成しておきます。
% aws transfer import-ssh-public-key --server-id="s-XXXXXXXXXXXXXXXXXXX" --ssh-public-key-body="`cat ~/.ssh/id_rsa.pub`" --user-name="test" { "ServerId": "s-XXXXXXXXXXXXXXXXXXX", "SshPublicKeyId": "key-XXXXXXXXXXXXXX", "UserName": "test" }
Terminalからのsftp接続指定
特に特別な指定は必要ありません。接続先は<SERVER_ID>.server.transfer.ap-northeast-1.amazonaws.com
となります。
% sftp -i ~/.ssh/id_rsa test@s-XXXXXXXXXXXXXXXXXXX.server.transfer.ap-northeast-1.amazonaws.com The authenticity of host 's-XXXXXXXXXXXXXXXXXXX.server.transfer.ap-northeast-1.amazonaws.com (XX.XX.XX.XX)' can't be established. RSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Are you sure you want to continue connecting (yes/no)? yes Connected to test@s-XXXXXXXXXXXXXXXXXXX.server.transfer.ap-northeast-1.amazonaws.com. sftp>
batchmodeでの実行
簡単にls
とget
のみでやってみます。
% cat << EOF > batch_commands ls get * EOF % sftp -b batch_commands -i ~/.ssh/id_rsa test@xxxxxxxxxxxxxxxxx.server.transfer.ap-northeast-1.amazonaws.com
ファイル一覧が表示されて、それらがまとめてローカルに転送されているはずです。
Serverの削除
削除する場合の手続きです。
ユーザの削除
% aws transfer delete-user --user-name="test" --server-id="s-XXXXXXXXXXXXXXXXXXX"
サーバの削除
% aws transfer delete-server --server-id="s-XXXXXXXXXXXXXXXXXXX"
まとめ
awscliを利用することで、AWS Transfer for SFTPもTerminal上から操作を完結できました。今回は最もシンプルな設定で行いました。必要に応じて各種オプションを指定しましょう。
十分すぎる程に素早く設営ができるため、SFTPサーバが必要な際は一つの選択として検討してみては如何でしょうか。